package org.example.pcbcircuitboard.controller;

import org.example.pcbcircuitboard.constants.StatusCode;
import org.example.pcbcircuitboard.constants.StatusData;
import org.example.pcbcircuitboard.pojo.*;
import org.example.pcbcircuitboard.service.VisualizationDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 可视化数据接口
 */
@RestController
@RequestMapping("/vis-data")
public class VisualizationDataController {
    @Autowired
    private VisualizationDataService visualizationDataService;
    /**
     * 左中数据接口
     * @param productsPojo 产品名称
     * @return 左中数据
     */
    @PostMapping("/left-center-data")
    public StatusData<Integer, List<LeftCenterPojo>> leftCenterData(@RequestBody ProductsPojo productsPojo) {
        try {
            String productName = productsPojo.getName();
            List<LeftCenterPojo> leftCenterPojos = visualizationDataService.getLeftCenterData(productName);
            return new StatusData<>(StatusCode.SUCCESS, leftCenterPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 中下数据接口
     * @return 中下数据
     */
    @PostMapping("/center-bottom-data")
    public StatusData<Integer,List<CenterBottomPojo>> centerBottomData() {
        try {

            List<CenterBottomPojo> centerBottomPojos = visualizationDataService.getCenterBottomData();
            return new StatusData<>(StatusCode.SUCCESS, centerBottomPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 配置窗口 查询产品对应所有批次
     * @param productsPojo 产品名称
     * @return 配置窗口 查询产品对应所有批次
     */
    @PostMapping("/disposition-batchs-data")
    public StatusData<Integer,List<DispositionPojo>> dispositionBatchsData(@RequestBody ProductsPojo productsPojo) {
        try {

            String productName = productsPojo.getName();
            List<DispositionPojo> dispositionPojos = visualizationDataService.getDispositionData(productName);
            return new StatusData<>(StatusCode.SUCCESS,dispositionPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 筛选 批次 查询
     * @param productsPojo 产品名称和批次
     *                       产品名称
     *                       批次
     * @return 筛选批次查询
     */
    @PostMapping("/sift-batchs-data")
    public StatusData<Integer,List<DispositionPojo>> siftBatchsData(@RequestBody ProductsPojo productsPojo) {
        try {

            String productName = productsPojo.getName();
            String batch=productsPojo.getBatch();
            List<DispositionPojo> dispositionPojos = visualizationDataService.getBatchDispositionData(productName,batch);
            return new StatusData<>(StatusCode.SUCCESS,dispositionPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 筛选 日期 查询
     * @param productsPojo 产品名称和日期
     *                       产品名称
     *                       日期
     * @return 筛选日期查询
     */
    @PostMapping("/sift-date-data")
    public StatusData<Integer,List<DispositionPojo>> siftDateData(@RequestBody ProductsPojo productsPojo) {
        try {

            String productName = productsPojo.getName();
            String date=productsPojo.getDate();
            List<DispositionPojo> dispositionPojos = visualizationDataService.getDateDispositionData(productName,date);
            return new StatusData<>(StatusCode.SUCCESS,dispositionPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 筛选 批次和日期 查询
     */
    @PostMapping("/sift-batch-date-data")
    public StatusData<Integer,List<DispositionPojo>> siftBatchDateData(@RequestBody ProductsPojo productsPojo) {
        try {

            String productName = productsPojo.getName();
            String batch=productsPojo.getBatch();
            String date=productsPojo.getDate();
            List<DispositionPojo> dispositionPojos = visualizationDataService.getBatchDateDispositionData(productName,batch,date);
            return new StatusData<>(StatusCode.SUCCESS,dispositionPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 获取这个产品的所有批次名
     * @param productsPojo 产品名称
     * @return 产品的所有批次名
     */
    @PostMapping("/sift-batch-name")
    public StatusData<Integer,List<DispositionPojo>> siftBatchName(@RequestBody ProductsPojo productsPojo) {
        try {

            List<DispositionPojo> dispositionPojos = visualizationDataService.getBatchNames(productsPojo.getName());
            return new StatusData<>(StatusCode.SUCCESS,dispositionPojos);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 获取所有产品名字
     * @return 所有产品名字
     */
    @PostMapping("/sift-product-name")
    public StatusData<Integer,List<String>> siftProductName() {
        try {
            List<String> productNames = visualizationDataService.getProductNames();
            return new StatusData<>(StatusCode.SUCCESS,productNames);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
    /**
     * 添加产品
     * @param productsPojo 产品名称
     * @return 添加产品
     */
    @PostMapping("/add-product")
    public StatusData<Integer,String> addProduct(@RequestBody ProductsPojo productsPojo){
        try {
            String productName = productsPojo.getName();
            // TODO 校验重名
            if (visualizationDataService.isRepeatProduct(productName)){
                if (visualizationDataService.insertProduct(productName)){
                    return new StatusData<>(StatusCode.SUCCESS,"添加成功");
                }else {
                    return new StatusData<>(StatusCode.ERROR,"添加失败");
                }
            }else {
                return new StatusData<>(StatusCode.ERROR,"产品名称重复");
            }
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,"错误！请联系管理员。");
        }
    }
    /**
     * 获取 产品检测总数--产品合格率--产品故障个数
     */
    @PostMapping("/navigation-data")
    public StatusData<Integer,NavigationPojo>  navigationData(@RequestBody ProductsPojo productsPojo) {
        try {

            String productName = productsPojo.getName();
            NavigationPojo navigationPojo = visualizationDataService.getNavigationData(productName);
            return new StatusData<>(StatusCode.SUCCESS,navigationPojo);
        }catch (Exception e){
            return new StatusData<>(StatusCode.ERROR,null);
        }
    }
}
